An Error Correcting Code (ECC) engine is a device which performs a process of detecting and correcting errors to ensure the accuracy and integrity of data during a data transmission. Typically, in memory systems, a memory controller writes data and ECC data to the memory device. The ECC data is used by the controller during a read operation to identify and correct errors that may have occurred since the data was written to the memory.
Memory devices can be categorized in two broad areas: volatile and non-volatile. Volatile memory devices require power to maintain data, while non volatile memories are capable of maintaining data in the absence of a power supply. An example of a non-volatile memory is the flash memory that stores information in a semiconductor device without the need for power to maintain the information in the chip.
Flash memory can be built using either NOR or NAND devices. NAND flash can be either of single-level cell (SLC) or multi-level cell (MLC) configuration. MLC NAND flash allows for a higher density memory device in comparison to SLC NAND flash because it allows the storage of two or more data bits in each memory cell. With the use of multiple levels to increase the memory density, more errors can occur during programming of the MLC NAND and an efficient error correction scheme is needed.